﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using DTO;
using BUS;

namespace GUI
{
    public partial class frmNhapHang : DevComponents.DotNetBar.Metro.MetroForm
    {
        public delegate void CapNhat();
        public event CapNhat KhiCapNhat = null;

        public frmNhapHang()
        {
            InitializeComponent();
        }

        private void frmNhapHang_Load(object sender, EventArgs e)
        {
            LoadDanhSachNhaCungCap();
            LoadDanhSachThietBi();
            cbTimKiem.SelectedIndex = 0;
        }

        private void LoadDanhSachThietBi()
        {
            ThietBiBUS bus = new ThietBiBUS();
            List<ThietBiDTO> ds = bus.LayDanhSachThietBi();
            dgvThietBi.Rows.Clear();
            for (int i = 0; i < ds.Count; i++)
            {
                dgvThietBi.Rows.Add(ds[i].MaThietBi, ds[i].TenThietBi, string.Format("{0:#,0.#}", ds[i].GiaNhap), ds[i].SoLuongTon);
            }
        }

        private void dgvThietBi_DoubleClick(object sender, EventArgs e)
        {
            int ma = (int)dgvThietBi.CurrentRow.Cells[0].Value;
            //if (dgvThietBiDuocChon.RowCount > 0)
            //    MessageBox.Show(dgvThietBiDuocChon.Rows[0].Cells[0].Value.ToString());
            ThietBiBUS tbbus = new ThietBiBUS();
            //NhaCungCapBUS nccbus = new NhaCungCapBUS();
            ThietBiDTO dto = tbbus.LayThongTinThietBi(ma);
            LinkLabel lXoa = new LinkLabel();
            lXoa.Text = "Xóa";
            if (dgvThietBiDuocChon.RowCount > 0)
            {
                for (int i = 0; i < dgvThietBiDuocChon.RowCount; i++)
                {
                    if (ma == (int)dgvThietBiDuocChon.Rows[i].Cells[0].Value)
                    {
                        int sl = (int)dgvThietBiDuocChon.Rows[i].Cells[6].Value + 1;
                        dgvThietBiDuocChon.Rows[i].Cells[6].Value = sl;
                        //dgvThietBiDuocChon.Rows[i].Cells[7].Value = string.Format("{0:#,0.#}", dto.GiaNhap * sl); //dto.GiaNhap ko dug cho column va textbox tongtien->lay gia nhap ma user da update. con o sl se ko sao neu user de 0 thi lan sau no se cong len 1 theo nhu code o tren 
                        double dg = double.Parse(dgvThietBiDuocChon.Rows[i].Cells[5].Value.ToString().Replace(",", ""));
                        dgvThietBiDuocChon.Rows[i].Cells[7].Value = string.Format("{0:#,0.#}", dg * sl);
                        //dgvThietBiDuocChon.Refresh();
                        txtTongTien.Text = string.Format("{0:#,0.#} VNĐ", TongTien());
                        return;
                    }
                }
                dgvThietBiDuocChon.Rows.Add(ma, dgvThietBiDuocChon.RowCount + 1, dto.TenThietBi, dto.XuatXu, dto.IMEI, string.Format("{0:#,0.#}", dto.GiaNhap), 1, string.Format("{0:#,0.#}", dto.GiaNhap), lXoa.Text);
            }
            else
            {
                dgvThietBiDuocChon.Rows.Add(ma, 1, dto.TenThietBi, dto.XuatXu, dto.IMEI, string.Format("{0:#,0.#}", dto.GiaNhap), 1, string.Format("{0:#,0.#}", dto.GiaNhap), lXoa.Text);
            }
            txtTongTien.Text = string.Format("{0:#,0.#} VNĐ", TongTien());
        }

        private double TongTien()
        {
            double tongtien = 0;
            for (int i = 0; i < dgvThietBiDuocChon.RowCount; i++)
            {
                tongtien = tongtien + double.Parse(dgvThietBiDuocChon.Rows[i].Cells[7].Value.ToString().Replace(",", ""));
            }
            return tongtien;
        }

        private void txtTimKiem_TextChanged(object sender, EventArgs e)
        {
            ThietBiBUS bus = new ThietBiBUS();
            List<ThietBiDTO> ds = new List<ThietBiDTO>(); //ko dc set ds=null vi neu chon cbTimKiem la index=6 vao try va bi catch do nhap chu->ds chua dc khoi tao->so lg ds ko co gia tri->khoi tao trc de ds.count=0
            if (cbTimKiem.SelectedIndex == 0)
                ds = bus.TimKiemThietBiTatCaTieuChi(txtTimKiem.Text);
            else if (cbTimKiem.SelectedIndex == 1)
                ds = bus.TimKiemThietBiTheoTen(txtTimKiem.Text);
            else if (cbTimKiem.SelectedIndex == 2)
                ds = bus.TimKiemThietBiTheoLoaiThietBi(txtTimKiem.Text);
            else if (cbTimKiem.SelectedIndex == 3)
                ds = bus.TimKiemThietBiTheoXuatXu(txtTimKiem.Text);
            else if (cbTimKiem.SelectedIndex == 4)
                ds = bus.TimKiemThietBiTheoChucNang(txtTimKiem.Text);
            else if (cbTimKiem.SelectedIndex == 5)
                ds = bus.TimKiemThietBiTheoIMEI(txtTimKiem.Text);
            else if (cbTimKiem.SelectedIndex == 6)
            {
                try
                {
                    ds = bus.TimKiemThietBiTheoGia(int.Parse(txtTimKiem.Text));
                }
                catch { }
            }
            else if (cbTimKiem.SelectedIndex == 7)
            {
                try
                {
                    ds = bus.TimKiemThietBiTheoSoLuongTon(int.Parse(txtTimKiem.Text));
                }
                catch { }
            }

            dgvThietBi.Rows.Clear();
            for (int i = 0; i < ds.Count; i++)
            {
                dgvThietBi.Rows.Add(ds[i].MaThietBi, ds[i].TenThietBi, ds[i].GiaNhap, ds[i].SoLuongTon);
            }
        }

        private void cbTimKiem_SelectedIndexChanged(object sender, EventArgs e)
        {
            ThietBiBUS bus = new ThietBiBUS();
            List<ThietBiDTO> ds = new List<ThietBiDTO>();
            if (cbTimKiem.SelectedIndex == 0)
                ds = bus.TimKiemThietBiTatCaTieuChi(txtTimKiem.Text);
            else if (cbTimKiem.SelectedIndex == 1)
                ds = bus.TimKiemThietBiTheoTen(txtTimKiem.Text);
            else if (cbTimKiem.SelectedIndex == 2)
                ds = bus.TimKiemThietBiTheoLoaiThietBi(txtTimKiem.Text);
            else if (cbTimKiem.SelectedIndex == 3)
                ds = bus.TimKiemThietBiTheoXuatXu(txtTimKiem.Text);
            else if (cbTimKiem.SelectedIndex == 4)
                ds = bus.TimKiemThietBiTheoChucNang(txtTimKiem.Text);
            else if (cbTimKiem.SelectedIndex == 5)
                ds = bus.TimKiemThietBiTheoIMEI(txtTimKiem.Text);
            else if (cbTimKiem.SelectedIndex == 6)
            {
                try
                {
                    ds = bus.TimKiemThietBiTheoGia(int.Parse(txtTimKiem.Text));
                }
                catch { }
            }
            else if (cbTimKiem.SelectedIndex == 7)
            {
                try
                {
                    ds = bus.TimKiemThietBiTheoSoLuongTon(int.Parse(txtTimKiem.Text));
                }
                catch { }
            }

            dgvThietBi.Rows.Clear();
            for (int i = 0; i < ds.Count; i++)
            {
                dgvThietBi.Rows.Add(ds[i].MaThietBi, ds[i].TenThietBi, ds[i].GiaNhap, ds[i].SoLuongTon);
            }
        }

        private void dgvThietBiDuocChon_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 8)
            {
                int ma = (int)dgvThietBiDuocChon.CurrentRow.Cells[0].Value;
                DialogResult dr = DevComponents.DotNetBar.MessageBoxEx.Show("Bạn có chắc chắn muốn xóa thiết bị này ra khỏi phiếu nhập?", "eMobile - Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (dr == DialogResult.Yes)
                {
                    int rowIndex = dgvThietBiDuocChon.CurrentRow.Index;
                    dgvThietBiDuocChon.Rows.Remove(dgvThietBiDuocChon.Rows[rowIndex]); //remove xog dgv tu cap nhat RowCount va hien thi luon ko can Refresh
                    //MessageBox.Show(dgvThietBiDuocChon.RowCount.ToString());
                    //dgvThietBiDuocChon.Refresh();
                    //MessageBox.Show(dgvThietBiDuocChon.RowCount.ToString());
                    txtTongTien.Text = string.Format("{0:#,0.#} VNĐ", TongTien());
                    //cap nhat lai STT
                    for (int i = rowIndex; i < dgvThietBiDuocChon.RowCount; i++)
                    {
                        dgvThietBiDuocChon.Rows[i].Cells[1].Value = (int)dgvThietBiDuocChon.Rows[i].Cells[1].Value - 1;
                    }
                }
            }
        }

        private void LoadDanhSachNhaCungCap()
        {
            NhaCungCapBUS nccbus = new NhaCungCapBUS();
            List<NhaCungCapDTO> dsncc = nccbus.LayDanhSachNhaCungCap();
            cbNhaCungCap.DataSource = dsncc;
            cbNhaCungCap.DisplayMember = "TenNhaCungCap";
            cbNhaCungCap.ValueMember = "MaNhaCungCap";
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            DialogResult dr = DevComponents.DotNetBar.MessageBoxEx.Show("Chú ý: Các mặt hàng có trong danh sách sẽ được cập nhật giá và số lượng sau khi lưu phiếu.\n Bạn có thể vào kho để chỉnh sửa thông tin và thiết lập giá bán. Bạn có chắc chắn muốn lưu?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
            if (dr == DialogResult.Yes)
            {
                PhieuNhapHangBUS pnhbus = new PhieuNhapHangBUS();
                PhieuNhapHangDTO pnhdto = new PhieuNhapHangDTO();
                ChiTietPhieuNhapHangBUS ctpnhbus = new ChiTietPhieuNhapHangBUS();
                ChiTietPhieuNhapHangDTO ctpnhdto = new ChiTietPhieuNhapHangDTO();
                ThietBiBUS tbbus = new ThietBiBUS();

                string strTongTien = txtTongTien.Text.Replace(",", "");
                strTongTien = strTongTien.Replace(" VNĐ", "");
                double tongtien = double.Parse(strTongTien);
                //while(dgvThietBiDuocChon.RowCount > 0)
                //{
                //them phieu nhap hang
                pnhdto.MaPhieuNhap = pnhbus.PhatSinhMaPhieuNhap();
                pnhdto.NgayNhap = DateTime.Now;
                //pnhdto.MaNhaCungCap = (int)dgvThietBiDuocChon.Rows[0].Cells[4].Value;
                pnhdto.MaNhaCungCap = (int)cbNhaCungCap.SelectedValue;
                pnhdto.NhanVienNhap = 2;
                pnhdto.GhiChu = txtGhiChu.Text;
                pnhdto.TongTien = tongtien;
                pnhbus.ThemPhieuNhapHang(pnhdto);
                ctpnhdto.MaPhieuNhap = pnhdto.MaPhieuNhap;

                //them chi tiet phieu nhap hang dong thoi cap nhat so luong va gia nhap cho phieu nhap hang
                for (int i = 0; i < dgvThietBiDuocChon.RowCount; i++)
                {

                    //if ((int)dgvThietBiDuocChon.Rows[i].Cells[4].Value == pnhdto.MaNhaCungCap)
                    //{
                    //pnh
                    //tongtien = tongtien + (int)dgvThietBiDuocChon.Rows[i].Cells[8].Value;

                    //them ctpnh
                    ctpnhdto.MaThietBi = (int)dgvThietBiDuocChon.Rows[i].Cells[0].Value; //(int) chi su dung dc cho object, ko su dung cho chuoi. ngc lai int.parse chi su dug cho chuoi ko cho object
                    ctpnhdto.DonGia = double.Parse(dgvThietBiDuocChon.Rows[i].Cells[5].Value.ToString().Replace(",", ""));
                    //ctpnhdto.SoLuong = (int)dgvThietBiDuocChon.Rows[i].Cells[6].Value; //why giag loi trog khi ctpnhdto.MaThietBi o tren thi ko?                       
                    ctpnhdto.SoLuong = int.Parse(dgvThietBiDuocChon.Rows[i].Cells[6].Value.ToString());
                    ctpnhdto.ThanhTien = double.Parse(dgvThietBiDuocChon.Rows[i].Cells[7].Value.ToString().Replace(",", ""));
                    ctpnhbus.ThemChiTietPhieuNhapHang(ctpnhdto);

                    //cap nhat thietbi
                    tbbus.CapNhatGiaNhap(ctpnhdto.MaThietBi, ctpnhdto.DonGia);
                    int sl = tbbus.LaySoLuongTon(ctpnhdto.MaThietBi) + ctpnhdto.SoLuong;
                    tbbus.CapNhatSoLuongTon(ctpnhdto.MaThietBi, sl);
                    //CapNhatSoLuongTonChoThietBi(MaThietBi, SoLuongThemVao);
                    //dgvThietBiDuocChon.Rows.Remove(dgvThietBiDuocChon.Rows[i]);


                    //}
                }

                //load lai dgvThietBi
                //int rowIndex = dgvThietBi.CurrentRow.Index;
                //int colIndex = dgvThietBi.CurrentCell.ColumnIndex;               
                LoadDanhSachThietBi();
                //dgvThietBi.CurrentCell = dgvThietBi.Rows[rowIndex].Cells[colIndex];

                //pnhdto.TongTien = tongtien;
                //bus.GanTongTienChoPhieuNhapHang(MaPhieuNhapHang, tongtien);
                //bus.ThemPhieuNhapHang(dto);//ko de o day dc vi phieu phai co trc chi tiet phieu

                //cap nhat so luong va gia nhap gia ban cho phieu nhap hang
            }
            //}
            if (KhiCapNhat != null)
                KhiCapNhat();
        }

        private void dgvThietBiDuocChon_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
        {
            if (dgvThietBiDuocChon.RowCount == 0)
                btnLuu.Enabled = false;
            else
                btnLuu.Enabled = true;
        }

        private void frmNhapHang_FormClosing(object sender, FormClosingEventArgs e)
        {
            //if (dgvThietBiDuocChon.RowCount != 0)
            //{
            //    DialogResult dr = DevComponents.DotNetBar.MessageBoxEx.Show("Phiếu nhập chưa được lưu, bạn có muốn lưu lại?", "eMobile - Thông báo", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
            //    if (dr == DialogResult.Yes)
            //    {

            //    }
            //    else if (dr == DialogResult.No)
            //        Close();
            //}
        }

        private void frmNhapHang_FormClosed(object sender, FormClosedEventArgs e)
        {
            //if (dgvThietBiDuocChon.RowCount != 0)
            //{
            //    DialogResult dr = DevComponents.DotNetBar.MessageBoxEx.Show("Phiếu nhập chưa được lưu, bạn có muốn lưu lại?", "eMobile - Thông báo", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
            //    if (dr == DialogResult.Yes)
            //    {

            //    }
            //    else if (dr == DialogResult.No)
            //        Close();
            //}
        }

        private DataGridViewTextBoxEditingControl txtKeypress;
        private void dgvThietBiDuocChon_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            //đoạn code chuyển handle từ 1 ô trong datagridview sang cái biến được khai báo kiểu Textbox
            //khi đó thì cái text box nó sẽ tự link với cái ô trong lưới đó và chỉ việc nhập bình thường như nhập texbox vậy
            try
            {
                txtKeypress = e.Control as DataGridViewTextBoxEditingControl;
                if (dgvThietBiDuocChon.CurrentCell.OwningColumn.Name == "Column14" || dgvThietBiDuocChon.CurrentCell.OwningColumn.Name == "Column11")
                {
                    txtKeypress.KeyPress -= KeyPressHandle;
                    txtKeypress.KeyPress += KeyPressHandle;
                }
                else
                {
                    txtKeypress.KeyPress -= KeyPressHandle;
                }
            }
            catch { }

            //cach# ko hay lam(khi thoat khoi cell neu cell ko hop le thi bao loi)
            //http://diendan.congdongcviet.com/threads/t57665::khong-cho-di-chuyen-ra-khoi-cell-trong-datagridview-khi-nhap-sai.cpp
            //if (dgvThietBiDuocChon.CurrentCell.OwningColumn.Name.Equals("Column14"))
            //{
            //    DataGridViewTextBoxEditingControl txt = e.Control as DataGridViewTextBoxEditingControl;
            //    EventHandler evt = null;
            //    evt = delegate(object obj, EventArgs arg)
            //    {
            //        if (txt.Text.Length > 3)
            //        {
            //            MessageBox.Show("3 ky tu thoi");
            //            txt.TextChanged -= evt;
            //            txt.Undo();
            //            txt.TextChanged += evt;
            //        }
            //    };
            //    txt.TextChanged += evt;
            //    txt.LostFocus += delegate(object obj, EventArgs arg)
            //    {
            //        txt.TextChanged -= evt;
            //    };
            //}
        }

        private void KeyPressHandle(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void dgvThietBiDuocChon_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            if (dgvThietBiDuocChon.CurrentCell.ColumnIndex == 5)
                dgvThietBiDuocChon.CurrentRow.Cells[5].Value = dgvThietBiDuocChon.CurrentRow.Cells[5].Value.ToString().Replace(",", "");
        }

        private void dgvThietBiDuocChon_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            int rowindex = dgvThietBiDuocChon.CurrentRow.Index;
            int cellindex = dgvThietBiDuocChon.CurrentCell.ColumnIndex;
            if (cellindex == 5 || cellindex == 6)
            {

                if (dgvThietBiDuocChon.Rows[rowindex].Cells[cellindex].Value == null)
                {
                    dgvThietBiDuocChon.Rows[rowindex].Cells[cellindex].Value = 0;
                    dgvThietBiDuocChon.Rows[rowindex].Cells[7].Value = 0;
                    txtTongTien.Text = string.Format("{0:#,0.#} VNĐ", TongTien());
                }
                else
                {
                    if (cellindex == 5)
                    {
                        //tai sao: double t = (double)dgvThietBiDuocChon.CurrentRow.Cells[5].Value vang loi? ->do cell chua value dag dc chon du la kieu int cug bi(why?)->xu ly code nhu duoi
                        double t = double.Parse(dgvThietBiDuocChon.Rows[rowindex].Cells[5].Value.ToString());
                        dgvThietBiDuocChon.Rows[rowindex].Cells[5].Value = string.Format("{0:#,0.#}", t);
                    }
                    double dg = double.Parse(dgvThietBiDuocChon.Rows[rowindex].Cells[5].Value.ToString().Replace(",", ""));
                    int sl = int.Parse(dgvThietBiDuocChon.Rows[rowindex].Cells[6].Value.ToString());
                    dgvThietBiDuocChon.Rows[rowindex].Cells[7].Value = string.Format("{0:#,0.#}", dg * sl);
                    txtTongTien.Text = string.Format("{0:#,0.#} VNĐ", TongTien());
                }
            }
        }
    }
}